/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * OnderdelenInvoerScherm.java
 *
 * Created on 2-feb-2010, 21:57:03
 */
package registratiesysteem;

import java.awt.Color;
import java.util.ArrayList;
import javax.swing.ImageIcon;

/**
 *
 * @author Eric
 */
public class OnderdelenInvoerScherm extends javax.swing.JFrame {

    final static int ID = 0;
    final static int CODE = 1;
    final static int NAAM = 2;
    final static int LENGTE = 3;
    final static int HOOGTE = 4;
    final static int BREEDTE = 5;
    final static int KLEUR = 6;
    final static int MATERIAAL = 7;
    final static int VOORRAAD = 8;
    // controle 'flag' die TRUE moeten zijn om bewerkingen uit te kunnen voeren
    private boolean boID;
    private boolean boCODE;
    private boolean boN;
    private boolean boL;
    private boolean boH;
    private boolean boB;
    private boolean boK;
    private boolean boM;
    private boolean boV;
    /**
     * plaatjes :)
     * Een leeg plaatje toegevoegd om verspringen van de opmaak te voorkomen. Is nog niet gelukt een doorzichtig plaatje te vinden.
     */
    private ImageIcon juist = new ImageIcon("plaatjes/juist.png");
    private ImageIcon onjuist = new ImageIcon("plaatjes/onjuist.png");
    private ImageIcon leeg = new ImageIcon("plaatjes/leeg.png");
    private ImageIcon zoek = new ImageIcon("plaatjes/zoek.png");
    /**
     * Veldcontrole met behulp van eenvoudige Regular Expressions. Wat mij betreft mogen namen best alle tekens bevatten. En onbepaalde lengte
     * Geetal velden mogen echter alleen getallen bevatten
     */
    private String regGetal = "[\\d]+"; // alleen getallen
    private String regNaam = ".+"; // alle tekens
    // Hier wordt een verwijzing naar het beheermenu opgenomen zodat we
    // vanuit dit scherm terug kunnen keren naar het beheermenu
    private BeheerMenu parentMenu;
    // Hier wordt de enumeratie opgeslagen die bepaald welke functie wordt
    // uitgevoerd zodra men een object heeft geselecteerd in het zoekscherm.
    private BeheerMenu.BewerkFunctie soortBewerking;
    private Onderdeel onderdeel = new Onderdeel();
    private OpgevraagdeGegevens gegevens;
    ArrayList<ArrayList<String>> deLeden = new ArrayList();

    /** Creates new form OnderdelenInvoerScherm */
    OnderdelenInvoerScherm(BeheerMenu hetParentMenu) {
        parentMenu = hetParentMenu;
        initComponents();
        btnZoekOnderdeel.setIcon(zoek);
        btnZoekSpeelgoedCode.setIcon(zoek);
        invoerVeldenLeeg();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        txtSpeelgoedCode = new javax.swing.JTextField();
        lblSpeelgoedCode = new javax.swing.JLabel();
        lblKleur = new javax.swing.JLabel();
        lblVoorraad = new javax.swing.JLabel();
        lblBreedte = new javax.swing.JLabel();
        txtNaam = new javax.swing.JTextField();
        lblMateriaal = new javax.swing.JLabel();
        lblOnderdeelNummer = new javax.swing.JLabel();
        txtOnderdeelNr = new javax.swing.JTextField();
        txtBreedte = new javax.swing.JTextField();
        txtKleur = new javax.swing.JTextField();
        lblNaam = new javax.swing.JLabel();
        txtLengte = new javax.swing.JTextField();
        lblLengte = new javax.swing.JLabel();
        txtVoorraad = new javax.swing.JTextField();
        txtHoogte = new javax.swing.JTextField();
        lblHoogte = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        btnZoekSpeelgoedCode = new javax.swing.JButton();
        cboMateriaal = new javax.swing.JComboBox();
        btnZoekOnderdeel = new javax.swing.JButton();
        btnActie = new javax.swing.JButton();
        btnAnnuleren = new javax.swing.JButton();
        jlStatusbar = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 24));
        jLabel1.setText("jLabel1");

        jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        txtSpeelgoedCode.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtSpeelgoedCode.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtSpeelgoedCodeKeyReleased(evt);
            }
        });

        lblSpeelgoedCode.setText("Speelgoedcode*");
        lblSpeelgoedCode.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        lblKleur.setText("Kleur*");
        lblKleur.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        lblVoorraad.setText("Voorraad*");
        lblVoorraad.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        lblBreedte.setText("Breedte");
        lblBreedte.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        txtNaam.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtNaam.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtNaamKeyReleased(evt);
            }
        });

        lblMateriaal.setText("Materiaal");
        lblMateriaal.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        lblOnderdeelNummer.setText("OnderdelNummer*");
        lblOnderdeelNummer.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        txtOnderdeelNr.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtOnderdeelNr.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtOnderdeelNrKeyReleased(evt);
            }
        });

        txtBreedte.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtBreedte.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtBreedteKeyReleased(evt);
            }
        });

        txtKleur.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtKleur.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtKleurKeyReleased(evt);
            }
        });

        lblNaam.setText("Naam*");
        lblNaam.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        txtLengte.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtLengte.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtLengteKeyReleased(evt);
            }
        });

        lblLengte.setText("Lengte");
        lblLengte.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        txtVoorraad.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtVoorraad.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtVoorraadKeyReleased(evt);
            }
        });

        txtHoogte.setFont(new java.awt.Font("Tahoma", 1, 11));
        txtHoogte.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                txtHoogteKeyReleased(evt);
            }
        });

        lblHoogte.setText("Hoogte");
        lblHoogte.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT);

        jLabel2.setText("cm");

        jLabel3.setText("cm");

        jLabel4.setText("cm");

        btnZoekSpeelgoedCode.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnZoekSpeelgoedCodeActionPerformed(evt);
            }
        });

        cboMateriaal.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Kies..", "Hout", "Plastic", "Ijzer", "Glas", "Papier", "Rubber", "Karton", "Keramiek", "Vloeistof", "Touw" }));
        cboMateriaal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cboMateriaalActionPerformed(evt);
            }
        });

        btnZoekOnderdeel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnZoekOnderdeelActionPerformed(evt);
            }
        });

        btnActie.setText("Opslaan");
        btnActie.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnActieActionPerformed(evt);
            }
        });

        btnAnnuleren.setText("Annuleren");
        btnAnnuleren.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAnnulerenActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lblSpeelgoedCode)
                    .addComponent(lblLengte)
                    .addComponent(lblNaam)
                    .addComponent(lblKleur)
                    .addComponent(lblMateriaal)
                    .addComponent(lblVoorraad)
                    .addComponent(lblOnderdeelNummer))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(btnActie, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE)
                        .addGap(191, 191, 191))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txtVoorraad, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(btnAnnuleren)
                                    .addGroup(jPanel1Layout.createSequentialGroup()
                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(txtNaam, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(txtKleur, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addGroup(jPanel1Layout.createSequentialGroup()
                                                .addComponent(txtLengte, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(jLabel3)
                                                .addGap(24, 24, 24)
                                                .addComponent(lblHoogte)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(txtHoogte, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
                                            .addGroup(jPanel1Layout.createSequentialGroup()
                                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                                    .addComponent(txtOnderdeelNr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                    .addComponent(txtSpeelgoedCode, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                    .addComponent(btnZoekSpeelgoedCode, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                    .addComponent(btnZoekOnderdeel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 71, Short.MAX_VALUE))
                                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                                                .addComponent(cboMateriaal, 0, 100, Short.MAX_VALUE)
                                                .addGap(85, 85, 85)))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jLabel2)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(lblBreedte)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(txtBreedte, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jLabel4)))
                                .addGap(23, 23, 23)))
                        .addGap(20, 20, 20))))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(txtOnderdeelNr, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblOnderdeelNummer))
                    .addComponent(btnZoekOnderdeel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(13, 13, 13)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(btnZoekSpeelgoedCode, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(txtSpeelgoedCode, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblSpeelgoedCode)))
                .addGap(11, 11, 11)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtNaam, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblNaam))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblLengte)
                    .addComponent(txtLengte, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(lblHoogte)
                    .addComponent(txtHoogte, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(lblBreedte)
                    .addComponent(jLabel4)
                    .addComponent(txtBreedte, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtKleur, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblKleur))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cboMateriaal, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblMateriaal))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblVoorraad)
                    .addComponent(txtVoorraad, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnActie)
                    .addComponent(btnAnnuleren))
                .addContainerGap())
        );

        lblSpeelgoedCode.getAccessibleContext().setAccessibleName("lblSpeelCode");
        lblKleur.getAccessibleContext().setAccessibleName("lblKleur");
        lblVoorraad.getAccessibleContext().setAccessibleName("lblVoorraad");
        lblBreedte.getAccessibleContext().setAccessibleName("lblBreedte");
        lblMateriaal.getAccessibleContext().setAccessibleName("lblMateriaal");
        lblOnderdeelNummer.getAccessibleContext().setAccessibleName("lblOnderdeelNr");
        txtOnderdeelNr.getAccessibleContext().setAccessibleName("txtOnderdeelNr");
        lblNaam.getAccessibleContext().setAccessibleName("lblNaam");
        lblLengte.getAccessibleContext().setAccessibleName("lblLengte");
        lblHoogte.getAccessibleContext().setAccessibleName("lblHoogt");

        jlStatusbar.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jlStatusbar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 500, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGap(173, 173, 173)
                .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(239, 239, 239))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(28, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE)
                .addComponent(jlStatusbar, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        jLabel1.getAccessibleContext().setAccessibleName("lblOnderdeel");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnActieActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnActieActionPerformed

        switch (soortBewerking) {

            case TOEVOEGEN:
                if (valideerVelden()) {
                    if (insertNieuwOnderdeel(grijpGegevens()) != -1) {
                        parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Het nieuwe reserveonderdeel is toegevoegd", Color.BLACK);
                    } else {
                        parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Het reserve onderdeel kan niet worden toegevoegd", Color.RED);
                    }
                    invoerVeldenLeeg();
                    this.setVisible(false);
                    parentMenu.setVisible(true);
                } else {
                    jlStatusbar.setText("Niet alle velden zijn juist ingevuld");
                }
                break;
            case WIJZIGEN:
                if (valideerVelden()) {
                    if (wijzigOnderdeel(grijpGegevens()) != -1) {
                        parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Het reserve onderdeel is gewijzigd", Color.BLACK);
                    } else {
                        parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Het reserve onderdeel kan niet worden gewijzgd", Color.RED);
                    }
                    invoerVeldenLeeg();
                    this.setVisible(false);
                    parentMenu.setVisible(true);

                } else {
                    jlStatusbar.setText("Niet alle velden zijn juist ingevuld");

                }
                break;
            case VERWIJDEREN:
                if ((Integer.parseInt(txtVoorraad.getText())) == 0) {
                    if (verwijderOnderdeel(Integer.parseInt(txtOnderdeelNr.getText())) != -1) {
                        parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Het reserve onderdeel is verwijdert", Color.BLACK);
                    } else {
                        parentMenu.setStatusbarText(parentMenu.jlStatusbar, "Het reserve onderdeel kan niet worden verwijdert", Color.RED);
                    }
                    invoerVeldenLeeg();
                    this.setVisible(false);
                    parentMenu.setVisible(true);
                } else {
                    jlStatusbar.setText("Er is nog voorraad");
                }
        }

    }//GEN-LAST:event_btnActieActionPerformed

    private void btnAnnulerenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAnnulerenActionPerformed
        this.setVisible(false);
        parentMenu.setVisible(true);
        invoerVeldenLeeg();
    }//GEN-LAST:event_btnAnnulerenActionPerformed

    private void btnZoekSpeelgoedCodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnZoekSpeelgoedCodeActionPerformed
        String code = txtSpeelgoedCode.getText();
        ArrayList<ArrayList<String>> list = null;

        if (code.isEmpty() || Character.isLetter(code.charAt(0))) {
            list = parentMenu.databaseConnectie.query("SELECT code , naam FROM speelgoed WHERE code IS NOT NULL ORDER BY code;");

            if (list != null && list.size() > 0) {
                parentMenu.zoekResultaten.initialiseerZoekScherm(this, OpgevraagdeGegevens.SPEELGOED_CODE, list);
                //setVisible(false);
                setEnabled(true);
                parentMenu.zoekResultaten.setLocationRelativeTo(null);
                parentMenu.zoekResultaten.setVisible(true);
            }
        }
        if (list == null || list.size() <= 0) {
            parentMenu.setStatusbarText(jlStatusbar, "Geen speelgoed gevonden", Color.RED);
        }
    }//GEN-LAST:event_btnZoekSpeelgoedCodeActionPerformed

    private void txtOnderdeelNrKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtOnderdeelNrKeyReleased
        if (onderdeelBestaat(Integer.parseInt(txtOnderdeelNr.getText()))) {
            toonGegevens(Integer.parseInt(txtOnderdeelNr.getText()));
            lblOnderdeelNummer.setIcon(juist);
        } else {
            lblOnderdeelNummer.setIcon(onjuist);
        }
    }//GEN-LAST:event_txtOnderdeelNrKeyReleased

    private void txtSpeelgoedCodeKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtSpeelgoedCodeKeyReleased
        if ((txtSpeelgoedCode.getText().length() == 4) && (speelgoedcodeBestaat(txtSpeelgoedCode.getText()))) {
            lblSpeelgoedCode.setIcon(juist);
        } else {
            lblSpeelgoedCode.setIcon(onjuist);
        }
    }//GEN-LAST:event_txtSpeelgoedCodeKeyReleased

    private void txtLengteKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtLengteKeyReleased
        if (txtLengte.getText().matches(regGetal) || txtLengte.getText().isEmpty()) {
            if (txtLengte.getText().matches(regGetal)) {
                lblLengte.setIcon(juist);
            }
            if (txtLengte.getText().isEmpty()) {
                lblLengte.setIcon(leeg);
            }
        } else {
            lblLengte.setIcon(onjuist);
        }
    }//GEN-LAST:event_txtLengteKeyReleased

    private void txtHoogteKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtHoogteKeyReleased
        if (txtHoogte.getText().matches(regGetal) || txtHoogte.getText().isEmpty()) {
            if (txtHoogte.getText().matches(regGetal)) {
                lblHoogte.setIcon(juist);
            }
            if (txtHoogte.getText().isEmpty()) {
                lblHoogte.setIcon(leeg);
            }
        } else {
            lblHoogte.setIcon(onjuist);
        }
    }//GEN-LAST:event_txtHoogteKeyReleased

    private void txtBreedteKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtBreedteKeyReleased
        if (txtBreedte.getText().matches(regGetal) || txtBreedte.getText().isEmpty()) {
            if (txtBreedte.getText().matches(regGetal)) {
                lblBreedte.setIcon(juist);
            }
            if (txtBreedte.getText().isEmpty()) {
                lblBreedte.setIcon(leeg);
            }
        } else {
            lblBreedte.setIcon(onjuist);
        }
    }//GEN-LAST:event_txtBreedteKeyReleased

    private void txtVoorraadKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtVoorraadKeyReleased
        if (txtVoorraad.getText().matches(regGetal)) {
            lblVoorraad.setIcon(juist);
        } else {
            if (txtVoorraad.getText().isEmpty()) {
                lblVoorraad.setIcon(leeg);
            } else {
                lblVoorraad.setIcon(onjuist);
            }
        }
    }//GEN-LAST:event_txtVoorraadKeyReleased

    private void txtNaamKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNaamKeyReleased
        if (txtNaam.getText().matches(regNaam)) {
            lblNaam.setIcon(juist);
        } else {
            if (txtNaam.getText().isEmpty()) {
                lblNaam.setIcon(leeg);
            } else {
                lblNaam.setIcon(onjuist);
            }
        }
    }//GEN-LAST:event_txtNaamKeyReleased

    private void txtKleurKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtKleurKeyReleased
        if ((txtKleur.getText().matches(regNaam))) {
            if (txtKleur.getText().matches(regNaam)) {
                lblKleur.setIcon(juist);
            }
            if (txtKleur.getText().isEmpty()) {
                lblKleur.setIcon(leeg);
            }
        } else {
            lblKleur.setIcon(onjuist);
        }
    }//GEN-LAST:event_txtKleurKeyReleased

    private void cboMateriaalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboMateriaalActionPerformed
        if (cboMateriaal.getSelectedIndex() == 0) {
           // lblMateriaal.setIcon(onjuist);
        } else {
            //lblMateriaal.setIcon(juist);
        }
    }//GEN-LAST:event_cboMateriaalActionPerformed

    private void btnZoekOnderdeelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnZoekOnderdeelActionPerformed
        String idonderdeel = txtOnderdeelNr.getText();
        ArrayList<ArrayList<String>> list = null;
        if (idonderdeel.isEmpty() || parentMenu.isTekstNumeriek(idonderdeel)) {
            list = parentMenu.databaseConnectie.query("SELECT * FROM onderdeel WHERE idonderdeel IS NOT NULL ORDER BY idonderdeel;");
            if (list != null && list.size() > 0) {
                parentMenu.zoekResultaten.initialiseerZoekScherm(this,OpgevraagdeGegevens.ONDERDEEL_CODE.ONDERDEEL_CODE , list);
                setVisible(false);
                parentMenu.zoekResultaten.setLocationRelativeTo(null);
                parentMenu.zoekResultaten.setVisible(true);
            }
        }
        if (list == null || list.size() <= 0) {
            parentMenu.setStatusbarText(jlStatusbar, "Geen lid gevonden", Color.RED);
        }
    }//GEN-LAST:event_btnZoekOnderdeelActionPerformed
    /**
     * @param args the command line arguments
     */
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnActie;
    private javax.swing.JButton btnAnnuleren;
    private javax.swing.JButton btnZoekOnderdeel;
    private javax.swing.JButton btnZoekSpeelgoedCode;
    private javax.swing.JComboBox cboMateriaal;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel jlStatusbar;
    private javax.swing.JLabel lblBreedte;
    private javax.swing.JLabel lblHoogte;
    private javax.swing.JLabel lblKleur;
    private javax.swing.JLabel lblLengte;
    private javax.swing.JLabel lblMateriaal;
    private javax.swing.JLabel lblNaam;
    private javax.swing.JLabel lblOnderdeelNummer;
    private javax.swing.JLabel lblSpeelgoedCode;
    private javax.swing.JLabel lblVoorraad;
    private javax.swing.JTextField txtBreedte;
    private javax.swing.JTextField txtHoogte;
    private javax.swing.JTextField txtKleur;
    private javax.swing.JTextField txtLengte;
    private javax.swing.JTextField txtNaam;
    private javax.swing.JTextField txtOnderdeelNr;
    private javax.swing.JTextField txtSpeelgoedCode;
    private javax.swing.JTextField txtVoorraad;
    // End of variables declaration//GEN-END:variables

    void initialiseerInvoerScherm(BeheerMenu.BewerkFunctie hetSoortBewerking) {
        soortBewerking = hetSoortBewerking;
        setVeldenVanuitBeheerMenu();
    }

    void initialiseerInvoerscherm(int lidnr) {
          toonGegevens(lidnr);
    }
   
    void initialiseerInvoerscherm(String speelgoedCode) {
        txtSpeelgoedCode.setText(speelgoedCode);
    }

    private int getMateriaalIndex(String materiaal) {
        int i = 0;
        for (int j = 0; j
                <= (cboMateriaal.getItemCount()); j++) {
            if (cboMateriaal.getItemAt(j).equals(materiaal)) {
                return j;
            }
        }
        return i;
    }

    void setVeldenVanuitBeheerMenu() {
        invoerVeldenLeeg();
        switch (soortBewerking) {
            case TOEVOEGEN:
                jLabel1.setText("Onderdeel Toevoegen");
                txtOnderdeelNr.setEnabled(false);
                txtOnderdeelNr.setText(Integer.toString((maxOnderdeelnr()) + 1));
                btnZoekOnderdeel.setVisible(false);
                btnZoekSpeelgoedCode.setVisible(true);
                txtSpeelgoedCode.setEnabled(true);
                txtNaam.setEnabled(true);
                txtLengte.setEnabled(true);
                txtHoogte.setEnabled(true);
                txtBreedte.setEnabled(true);
                txtKleur.setEnabled(true);
                cboMateriaal.setEnabled(true);
                txtVoorraad.setEnabled(true);
                btnActie.setText("Nieuw onderdeel toevoegen");
                break;
            case WIJZIGEN:
                jLabel1.setText("Onderdeel Wijzigen");
                txtOnderdeelNr.setEnabled(true);
                btnZoekOnderdeel.setVisible(true);
                txtNaam.setEnabled(true);
                txtLengte.setEnabled(true);
                txtHoogte.setEnabled(true);
                txtBreedte.setEnabled(true);
                txtKleur.setEnabled(true);
                cboMateriaal.setEnabled(true);
                txtVoorraad.setEnabled(true);
                btnActie.setText("Onderdeel wijzigen");
                break;
            case VERWIJDEREN:
                jLabel1.setText("Onderdeel verwijderen");
                btnZoekOnderdeel.setVisible(true);
                btnZoekSpeelgoedCode.setVisible(false);
                txtSpeelgoedCode.setEnabled(false);
                txtNaam.setEnabled(false);
                txtLengte.setEnabled(false);
                txtHoogte.setEnabled(false);
                txtBreedte.setEnabled(false);
                txtKleur.setEnabled(false);
                cboMateriaal.setEnabled(false);
                txtVoorraad.setEnabled(false);
                btnActie.setText("Onderdeel verwijderen");
        }
    }

    void invoerVeldenLeeg() {
        txtOnderdeelNr.setText("");
        txtSpeelgoedCode.setText("");
        txtNaam.setText("");
        txtLengte.setText("");
        txtHoogte.setText("");
        txtBreedte.setText("");
        txtKleur.setText("");
        txtVoorraad.setText("");
        cboMateriaal.setSelectedIndex(-1);
        lblOnderdeelNummer.setIcon(leeg);
        lblSpeelgoedCode.setIcon(leeg);
        lblNaam.setIcon(leeg);
        lblLengte.setIcon(leeg);
        lblHoogte.setIcon(leeg);
        lblBreedte.setIcon(leeg);
        lblKleur.setIcon(leeg);
        lblMateriaal.setIcon(leeg);
        lblVoorraad.setIcon(leeg);
        jlStatusbar.setText("");
    }

    /**
     * Methode valideerVelden bepaalt per soort handeling
     * het aantal velden dat juist gevuld moet zijn
     * @return
     */
    private boolean valideerVelden() {
        //klopt het onderdeelnummer?
        // een nieuw onderdeel staat nog niet in de DataBase, dit nummer kan dan ook niet handmatig worden opgegeven.
        switch (soortBewerking) {
            case TOEVOEGEN:
                System.out.println("toevoegen gaat goed");
                //lblOnderdeelNummer.setIcon(juist);
                boID = true;
                break;
            case WIJZIGEN:
                System.out.println("Wijzigen gaat goed");
                if (onderdeelBestaat(Integer.parseInt(txtOnderdeelNr.getText()))) {
                    lblOnderdeelNummer.setIcon(juist);
                    boID = true;
                } else {
                    lblOnderdeelNummer.setIcon(onjuist);
                    boID = false;
                }
                break;
            case VERWIJDEREN:
                System.out.println("verwijderen gaat goed");
                lblOnderdeelNummer.setIcon(juist);
                boID = true;
                break;
        }
        // en de speelgoedCode?  
        if ((txtSpeelgoedCode.getText().length() == 4) && speelgoedcodeBestaat(txtSpeelgoedCode.getText())) {
            lblSpeelgoedCode.setIcon(juist);
            boCODE = true;
        } else {
            lblSpeelgoedCode.setIcon(onjuist);
            boCODE = false;
        }       

        //en is het naamveld niet leeg?
        if (txtNaam.getText().matches(regNaam)) {
            lblNaam.setIcon(juist);
            boN = true;
        } else {
            if (txtNaam.getText().isEmpty()) {
                lblNaam.setIcon(leeg);
            } else {
                lblNaam.setIcon(onjuist);
            }
            boN = false;
        }        

        //Lengte mag leeg zijn maar mogen alleen cijfers zijn
        if (txtLengte.getText().matches(regGetal) || txtLengte.getText().isEmpty()) {
            if (txtLengte.getText().matches(regGetal)) {
                lblLengte.setIcon(juist);
            }
            if (txtLengte.getText().isEmpty()) {
                lblLengte.setIcon(leeg);
            }
            boL = true;
        } else {
            lblLengte.setIcon(onjuist);
            boL = false;


        } //hoogte mag leeg zijn maar wel alleen cijfers
        if (txtHoogte.getText().matches(regGetal) || txtHoogte.getText().isEmpty()) {
            if (txtHoogte.getText().matches(regGetal)) {
                lblHoogte.setIcon(juist);
            }
            if (txtHoogte.getText().isEmpty()) {
                lblHoogte.setIcon(leeg);
            }
            boH = true;
        } else {
            lblHoogte.setIcon(onjuist);
            boH = false;


        } //idem breedte
        if (txtBreedte.getText().matches(regGetal) || txtBreedte.getText().isEmpty()) {
            if (txtBreedte.getText().matches(regGetal)) {
                lblBreedte.setIcon(juist);
            }
            if (txtBreedte.getText().isEmpty()) {
                lblBreedte.setIcon(leeg);
            }
            boB = true;
        } else {
            lblBreedte.setIcon(onjuist);
            boB = false;
        } //Kleur is een verplicht veld maar mag wel uit alle schrijftekens bestaan
        if ((txtKleur.getText().matches(regNaam))) {
            if (txtKleur.getText().matches(regNaam)) {
                lblKleur.setIcon(juist);
            }
            if (txtKleur.getText().isEmpty()) {
                lblKleur.setIcon(leeg);
            }
            boK = true;
        } else {
            lblKleur.setIcon(onjuist);
            boK = false;


        }
        //materiaal hoeft niet gekozen te worden
        //if (cboMateriaal.getSelectedIndex() == 0) {
        //lblMateriaal.setIcon(onjuist);
       // boM = true;
        //} else {
        //lblMateriaal.setIcon(juist);
        //boM = false;
        //}

        //voorraad is een verplicht veld en mag alleen uit digits bestaan
        if (txtVoorraad.getText().matches(regGetal)) {
            lblVoorraad.setIcon(juist);
            boV = true;

        } else {
            lblVoorraad.setIcon(onjuist);
            boV = false;
        }
        // en als dat allemaal waar is, geeft valideer velden een true terug       
        return ((boID && boCODE && boN && boL && boH && boB && boK && boV)) ? true : false;
    }

    private boolean onderdeelBestaat(int onderdeelNummer) {
        return (parentMenu.databaseConnectie.rowCount(onderdeelNummer) == 1);
    }

    private boolean speelgoedcodeBestaat(String code) {
        return (parentMenu.databaseConnectie.rowCount(code) == 1);
    }

    private int maxOnderdeelnr() {
        ArrayList<ArrayList<String>> resultaat;
        int hetOnderdeelnummer = 0, maxOnderdeelnummer = 0;
        resultaat = parentMenu.databaseConnectie.query("SELECT idonderdeel FROM onderdeel");
        if (resultaat != null) {
            for (ArrayList<String> s : resultaat) {
                hetOnderdeelnummer = Integer.parseInt(s.get(ID));
                if (hetOnderdeelnummer > maxOnderdeelnummer) {
                    maxOnderdeelnummer = hetOnderdeelnummer;
                }
            }
        }
        return maxOnderdeelnummer;
    }

    // een methode die een object onderdeel aanmaakt en die vult met de gegevens van het scherm
    private Onderdeel grijpGegevens() {
        onderdeel.setOnderdeelnummer(Integer.parseInt(txtOnderdeelNr.getText()));
        onderdeel.setSpeelgoedcode(txtSpeelgoedCode.getText());
        onderdeel.setOnderdeelnaam(txtNaam.getText());
        if (!(txtLengte.getText().isEmpty())) {
            onderdeel.setLengte(Integer.parseInt(txtLengte.getText()));
        }
        if (!(txtHoogte.getText().isEmpty())) {
            onderdeel.setHoogte(Integer.parseInt(txtHoogte.getText()));
        }
        if (!(txtBreedte.getText().isEmpty())) {
            onderdeel.setBreedte(Integer.parseInt(txtBreedte.getText()));
        }
        onderdeel.setKleur(txtKleur.getText());
        onderdeel.setMateriaal(String.valueOf(cboMateriaal.getSelectedItem()));
        onderdeel.setVoorraad(Integer.parseInt(txtVoorraad.getText()));
        return onderdeel;
    }

    private void toonGegevens(int lidnr) {
        ArrayList<ArrayList<String>> resultaat;
        // Onderdeel onderdeel = new Onderdeel();
        parentMenu.databaseConnectie.prepareStatement("SELECT * FROM onderdeel WHERE idonderdeel = ?;");
        parentMenu.databaseConnectie.setInt(1, (lidnr));
        resultaat = parentMenu.databaseConnectie.query();

        if (resultaat != null) {
            txtOnderdeelNr.setText(resultaat.get(0).get(ID));
            txtSpeelgoedCode.setText(resultaat.get(0).get(CODE));
            txtNaam.setText(resultaat.get(0).get(NAAM));
            txtLengte.setText(resultaat.get(0).get(LENGTE));
            txtHoogte.setText(resultaat.get(0).get(HOOGTE));
            txtBreedte.setText(resultaat.get(0).get(BREEDTE));
            txtKleur.setText(resultaat.get(0).get(KLEUR));
            if (resultaat.get(0).get(MATERIAAL).equals(null) || resultaat.get(0).get(MATERIAAL).equals("null")) {
                cboMateriaal.setSelectedIndex(0);
            } else {
                cboMateriaal.setSelectedIndex(getMateriaalIndex(resultaat.get(0).get(MATERIAAL)));
            }
            txtVoorraad.setText(resultaat.get(0).get(VOORRAAD));
        }
    }

    public int insertNieuwOnderdeel(Onderdeel onderdeel) {
        parentMenu.databaseConnectie.prepareStatement("INSERT INTO onderdeel "
                + "(idonderdeel, fk_code, naam, lengte, hoogte, breedte, kleur, materiaal, voorraad) "
                + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
        parentMenu.databaseConnectie.setInt(1, onderdeel.getOnderdeelnummer());
        parentMenu.databaseConnectie.setString(2, onderdeel.getSpeelgoedcode());
        parentMenu.databaseConnectie.setString(3, onderdeel.getOnderdeelnaam());
        parentMenu.databaseConnectie.setInt(4, onderdeel.getLengte());
        parentMenu.databaseConnectie.setInt(5, onderdeel.getHoogte());
        parentMenu.databaseConnectie.setInt(6, onderdeel.getBreedte());
        parentMenu.databaseConnectie.setString(7, onderdeel.getKleur());
        parentMenu.databaseConnectie.setString(8, onderdeel.getMateriaal());
        parentMenu.databaseConnectie.setInt(9, onderdeel.getVoorraad());
        return parentMenu.databaseConnectie.update();
    }

    public int wijzigOnderdeel(Onderdeel onderdeel) {
        parentMenu.databaseConnectie.prepareStatement("UPDATE onderdeel SET "
                + "fk_code = ?, naam = ?, lengte = ?, hoogte = ?,  breedte = ?,"
                + " kleur = ?, materiaal = ?, voorraad = ? WHERE idonderdeel = ?;");
        parentMenu.databaseConnectie.setString(1, onderdeel.getSpeelgoedcode());
        parentMenu.databaseConnectie.setString(2, onderdeel.getOnderdeelnaam());
        parentMenu.databaseConnectie.setInt(3, onderdeel.getLengte());
        parentMenu.databaseConnectie.setInt(4, onderdeel.getHoogte());
        parentMenu.databaseConnectie.setInt(5, onderdeel.getBreedte());
        parentMenu.databaseConnectie.setString(6, onderdeel.getKleur());
        parentMenu.databaseConnectie.setString(7, onderdeel.getMateriaal());
        parentMenu.databaseConnectie.setInt(8, onderdeel.getVoorraad());
        parentMenu.databaseConnectie.setInt(9, onderdeel.getOnderdeelnummer());
        return parentMenu.databaseConnectie.update();
    }

    public int verwijderOnderdeel(int onderdeelNummer) {
        parentMenu.databaseConnectie.prepareStatement("DELETE FROM onderdeel WHERE idonderdeel = ?;");
        parentMenu.databaseConnectie.setInt(1, onderdeelNummer);
        return parentMenu.databaseConnectie.update();
    }

    enum OpgevraagdeGegevens {
        SPEELGOED_CODE, ONDERDEEL_CODE
    }
}
